Tools for generating load against a computing system have been around for decades. All of the tools available today share a common attribute: developing the code to be executed as a load test is always a straight-line, or procedural, activity.
For example, a typical HTTP load test script contains something like:    1. connect to a particular web server    2. get the home page    3. get GIF 1    4. get GIF 2    5. etc.    6. send your login credentials    7. get the next page    8. get GIF 1    9. get GIF 2    10. etc.    11. search for an item to buy    12. get the next page    13. add item to shopping cart    14. get the next page    15. checkout    16. enter credit card data    17. get next page (confirmation)    18. logout    19. get the next page
This script is a sequence of events, and developers of load testing tools represent this sequence using either procedural languages (whether proprietary or not) or with procedural code written in an object-oriented language (such as tools on the market that use Java to represent their procedural load test).
These tools suffer to varying degrees from some of the same disadvantages, namely, (1) they use “old” languages with which many modern programmers are unfamiliar, or (2) they use proprietary languages that programmers do not want to learn. In addition, even tools that use modern object-oriented languages like Java or C++ are plagued with a different set of problems, namely, that they require excessive resources to produce a load test (some tools require one OS process per user, others require one thread per user). The combination of these two sets of problem areas has produced a set of tools that are never both modern and performant.
Further, procedural load testing tools suffer from a common malady. When there is a need to add support for another type of back-end system (e.g., an HTTP server or a database server, or a particular application server like BEA, WebSphere, etc.), many client libraries need to be developed in order to allow the solution to function as needed. This is an arduous process that can only be done by the manufacturer or by a partner working with the manufacturer of the load testing tool.